package ru.driveclickbank.sspservice;

import java.io.File;
import java.io.IOException;

import org.apache.hc.client5.http.classic.methods.HttpPost;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.core5.http.ContentType;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.http.io.entity.StringEntity;

import com.fasterxml.jackson.databind.ObjectMapper;

import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Unmarshaller;
import lombok.extern.slf4j.Slf4j;
import ru.driveclickbank.sspservice.model.ЗапросСведенийОПлатежах;

@Slf4j
public class MainTest {
	public static void main(String[] args) {
		log.info("started");
		try {
			// Создание объекта JAXBContext
			JAXBContext jaxbContext = JAXBContext.newInstance(ЗапросСведенийОПлатежах.class);

			// Создание Unmarshaller
			Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

			// Указание пути к XML файлу
			File xmlFile = new File(
					"E:\\Anri\\src\\java_anri\\ssp-service\\src\\test\\resources\\xml\\qcb_request.xml");

			// Unmarshalling XML в объект
			ЗапросСведенийОПлатежах запрос = (ЗапросСведенийОПлатежах) jaxbUnmarshaller.unmarshal(xmlFile);

			// Вывод данных объекта
			System.out.println("Версия: " + запрос.getВерсия());
			System.out.println("Идентификатор запроса: " + запрос.getИдентификаторЗапроса());
			System.out.println("Тип запроса: " + запрос.getТипЗапроса());

			// Продолжите вывод всех остальных данных объекта...
			отправитьЗапрос(запрос);

		} catch (JAXBException | IOException e) {
			e.printStackTrace();
		}
	}

	public static void отправитьЗапрос(ЗапросСведенийОПлатежах запрос) throws IOException {
		log.info("запрос {}", запрос);
		// Создание клиента HTTP
		try (CloseableHttpClient httpClient = HttpClients.createDefault()) {

			// URL для отправки POST запроса
			String url = "https://ssptest.bki-okb.com/dlrequest";

			// Создание POST запроса
			HttpPost httpPost = new HttpPost(url);

			// Преобразование объекта запроса в JSON
			ObjectMapper objectMapper = new ObjectMapper();
			String jsonRequest = objectMapper.writeValueAsString(запрос);

			// Установка тела запроса
			StringEntity entity = new StringEntity(jsonRequest, ContentType.APPLICATION_JSON);
			httpPost.setEntity(entity);

			// Выполнение запроса и обработка ответа с помощью HttpClientResponseHandler
			Object response = httpClient.execute(httpPost, httpResponse -> {
				// Обработка ответа здесь, если это необходимо
				// Например, можно прочитать ответ и вернуть его
				System.out.println("Код ответа: " + httpResponse.getCode());
				System.out.println("Ответ сервера:");
				System.out.println(EntityUtils.toString(httpResponse.getEntity()));
				return httpResponse;
			});

			// Дополнительный код здесь, если это необходимо
			System.out.println("response: " + response);
		}
	}

	// Дополнительный код здесь...

}